package org.dxy.domain.event.equipment;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Value;
import org.dxy.domain.event.AggregateTypeEnum;
import org.dxy.domain.event.DomainEvent;

import java.time.LocalDateTime;
import java.util.Map;

/**
 * 设备配置已变更事件
 * 表示设备的核心运行配置发生变更，例如网络信息、驱动版本、固件升级等。
 * 典型场景：
 *  - 系统管理员修改设备 IP 地址
 *  - 升级设备驱动程序或固件
 *  - 变更通信协议参数或访问令牌
 * @author dxy
 * @createTime 2025/6/13 22:44
 */
@Value
@Builder
@AllArgsConstructor
public class EquipmentConfigurationChangedEvent implements DomainEvent {
    /**
     * 设备唯一标识
     */
    Long equipmentId;

    /**
     * 变更的配置字段及其新值，例如：
     *   "ipAddress" -> "192.168.1.100"
     *   "firmwareVersion" -> "v2.0.1"
     */
    Map<String, String> changedFields;

    /**
     * 变更发起人（操作员）
     */
    String operator;

    /**
     * 配置变更时间
     */
    @Builder.Default
    LocalDateTime timestamp = LocalDateTime.now();
    
    @Override
    public Long aggregateId() {
        return equipmentId;
    }
    
    @Override
    public String aggregateType() {
        return AggregateTypeEnum.EQUIPMENT.getKey();
    }
    
    @Override
    public String eventType() {
        return EquipmentEventTypeEnum.CONFIGURATION_CHANGED.getKey();
    }
}